<!--
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->

<!--
@group Paper Elements

Material Design: <a href="http://www.google.com/design/spec/components/buttons.html">Buttons</a>

`paper-button` is a button. When the user touches the button, a ripple effect emanates
from the point of contact. It may be flat or raised. A raised button is styled with a
shadow.

Example:

    <paper-button>flat button</paper-button>
    <paper-button raised>raised button</paper-button>

You may use custom DOM in the button body to create a variety of buttons. For example, to
create a button with an icon and some text:

    <paper-button>
      <core-icon icon="favorite">
      custom button content
    </paper-button>

Styling
-------

Style the button with CSS as you would a normal DOM element.

    /* make #my-button green with yellow text */
    #my-button {
        background: green;
        color: yellow;
    }

By default, the ripple is the same color as the foreground at 25% opacity. You may
customize the color using this selector:

    /* make #my-button use a blue ripple instead of foreground color */
    #my-button::shadow #ripple {
      color: blue;
    }

The opacity of the ripple is not customizable via CSS.

@element paper-button
@extends paper-button-base
@status unstable
-->

<link href="../polymer/polymer.html" rel="import">
<link href="../core-icon/core-icon.html" rel="import">
<link href="../paper-ripple/paper-ripple.html" rel="import">
<link href="../paper-shadow/paper-shadow.html" rel="import">

<link href="paper-button-base.html" rel="import">

<polymer-element name="paper-button" extends="paper-button-base" attributes="raised recenteringTouch fill"
role="button">

  <template>

    <style>

      :host {
        display: inline-block;
        position: relative;
        box-sizing: border-box;
        min-width: 5.14em;
        padding: 0.7em 0.57em;
        margin: 0 0.29em;
        background: transparent;
        text-align: center;
        font: inherit;
        text-transform: uppercase;
        outline: none;
        border-radius: 3px;
        -webkit-user-select: none;
        user-select: none;
        cursor: pointer;
        z-index: 0;
      }

      :host([disabled]) {
        background: #eaeaea !important;
        color: #a8a8a8 !important;
        cursor: auto;
        pointer-events: none;
      }

      ::content * {
        text-transform: inherit;
      }

      #ripple {
        pointer-events: none;
        z-index: -1;
      }

    </style>

    <template if="{{raisedButton || raised}}">
      <paper-shadow id="shadow" z="{{z}}" animated></paper-shadow>
    </template>

    <!-- this div is needed to position the ripple behind text content -->
    <div relative>
      <content></content>
      {{label}}
    </div>

  </template>

  <script>
    Polymer({

      publish: {

        label: '',

        /**
         * If true, the button will be styled with a shadow.
         *
         * @attribute raised
         * @type boolean
         * @default false
         */
        raised: false,
        raisedButton: false,

        /**
         * By default the ripple emanates from where the user touched the button.
         * Set this to true to always center the ripple.
         *
         * @attribute recenteringTouch
         * @type boolean
         * @default false
         */
        recenteringTouch: false,

        /**
         * By default the ripple expands to fill the button. Set this to true to
         * constrain the ripple to a circle within the button.
         *
         * @attribute fill
         * @type boolean
         * @default true
         */
        fill: true

      },

      labelChanged: function() {
        if (this.label) {
          console.warn('The "label" property is deprecated.');
        }
      },

      raisedButtonChanged: function() {
        if (this.raisedButton) {
          console.warn('The "raisedButton" property is deprecated.');
        }
      }

    });
  </script>
</polymer-element>
